export const ERROR_MESSAGE_FOR_115 = "您的账号在新的浏览器或设备上登录，如非本人操作，请及时修改密码。"; //服务器返回 115 错误码的错误消息修改为写死的错误信息

/**
 * 
 * @param {any} response Response 对象 
 * @param {any} component  组件，为了调用 component 的弹出消息方法
 * @param {Boolean} showMessageOnErrCode105 错误码为 105 时，是否显示错误提示消息
 * @returns 
 */
export function handleResponse(response, component, showMessageOnErrCode105 = true) {
    return new Promise((resolve, reject) => {
        if (!component) {
            reject("传入的 component 为空");
        } else {
            if (response && response.result && response.result.status_info) {
                if (100 === response.result.status_info.status_code) {
                    resolve(response.result);
                } else {
                    if (105 !== response.result.status_info.status_code 
                        || (105 === response.result.status_info.status_code && showMessageOnErrCode105)) { //不是「105 错误」 或者 是「105」但是传入参数是需要显示消息则显示，否则不显示消息提示 「105」无资源匹配错误
                        if (115 === response.result.status_info.status_code) { //115 特殊处理，修改为本地设置的报错内容
                            component.$message({
                                message: ERROR_MESSAGE_FOR_115 || "接口请求失败，请稍后重试",
                                type: "error",
                            });
                        } else {
                            component.$message({
                                message: response.result.status_info.status_message,
                                type: "error",
                            });
                        }
                    }
                    reject(response.result.status_info);
                }
            } else {
                reject();
            }
        }
    });
}

/**
 * 检测一个对象是否是 Blob 类型
 * @param {any} obj 等检测对象 
 * @returns 
 */
export function isBlob(obj) {
    return obj instanceof Blob || Object.prototype.toString.call(obj) === '[object Blob]' || (obj && obj.constructor && obj.constructor.name === 'Blob');
}

/**
 * 保存用户登录信息
 * @param {UserInfo} userInfo 
 */
export function saveLoginUserInfo(userInfo) {
    if (!userInfo) {
        return ;
    }
    localStorage.setItem("releaseToken", userInfo.access_token || "");
    localStorage.setItem("releaseIMSig", userInfo.im_sig || "");
    localStorage.setItem("releaseIMUid", userInfo.im_uid || "");
    localStorage.setItem("avatarUrl", userInfo.profile_picture);
    localStorage.setItem("roleType", userInfo.role_type || 1); //用户角色类型: 1：普通读者 2：报刊社职工
}

/**
 * 清空用户登录信息
 */
export function clearLoginUserInfo() {
    localStorage.removeItem("releaseToken");
    localStorage.removeItem("releaseIMSig");
    localStorage.removeItem("releaseIMUid");
    localStorage.removeItem("avatarUrl");
    localStorage.removeItem("roleType");
}

/**
 * 保存登录用户账号、密码及是否记住密码选项，以方便在登录页面自动填充
 * @param {String} username 账号
 * @param {String} password 密码
 */
export function saveLoginFields(account, password) {
    localStorage.setItem("releaseAccount", account);
    localStorage.setItem("releasePassword", password);
    localStorage.setItem("releaseRememberPassword", true); //是否选择了记住密码
}

/**
 * 清空登录用户账号、密码及是否记住密码选项
 */
export function clearLoginFields() {
    localStorage.removeItem("releaseAccount");
    localStorage.removeItem("releasePassword");
    localStorage.removeItem("releaseRememberPassword");
}